package cn.usian.basicInformation.log.commons;//package cn.usian.config.log;
//
//import cn.usian.config.feign.LogFeign;
//import cn.usian.pojo.basicInformation.log.BaseOperationLog;
//import jakarta.servlet.http.HttpServletRequest;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.AfterReturning;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestAttributes;
//import org.springframework.web.context.request.RequestContextHolder;
//
//import java.lang.reflect.Method;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Objects;
//
///**
// * @path：com.demo.utils.aop.LogAspect.java
// * @className：LogAspect.java
// * @description：切面处理类，操作日志异常日志记录处理
// * @author：tanyp
// * @dateTime：2021/11/18 13:57
// * @editNote：
// */
//@Aspect
//@Component
//@Slf4j
//public class LogAspectA {
//
//    /**
//     * 统计请求的处理时间
//     */
//    ThreadLocal<Long> startTime = new ThreadLocal<>();
//
//    @Autowired
//    private LogFeign logInfoService;
//
//
//    /**
//     * @methodName：logPoinCut
//     * @description：设置操作日志切入点 记录操作日志 在注解的位置切入代码
//     * @author：tanyp
//     * @dateTime：2021/11/18 14:22
//     * @Params： []
//     * @Return： void
//     * @editNote：
//     */
//    @Pointcut("@annotation(cn.usian.config.log.Log)")
//    public void logPoinCut() {
//    }
//
//    /**
//     * @methodName：exceptionLogPoinCut
//     * @description：设置操作异常切入点记录异常日志 扫描所有controller包下操作
//     * @author：tanyp
//     * @dateTime：2021/11/18 14:22
//     * @Params： []
//     * @Return： void
//     * @editNote：
//     */
//    @Pointcut("execution(* cn.usian.basicInformation.*.controller..*.*(..))")
//    public void exceptionLogPoinCut() {
//    }
//
//    @Before("logPoinCut()")
//    public void doBefore() {
//        // 接收到请求，记录请求开始时间
//        startTime.set(System.currentTimeMillis());
//    }
//
//    /**
//     * @methodName：doAfterReturning
//     * @description：正常返回通知，拦截用户操作日志，连接点正常执行完成后执行， 如果连接点抛出异常，则不会执行
//     * @author：tanyp
//     * @dateTime：2021/11/18 14:21
//     * @Params： [joinPoint, keys]
//     * @Return： void
//     * @editNote：
//     */
//    @AfterReturning(value = "logPoinCut()", returning = "keys")
//    public void doAfterReturning(JoinPoint joinPoint, Object keys) {
//        log.info("keys中的数据：{}", keys);
//        // 获取RequestAttributes
//        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//
//        // 从获取RequestAttributes中获取HttpServletRequest的信息
//        HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
//        log.info("获取的request：{}", request.getParameterMap());
//
//        BaseOperationLog logInfo = BaseOperationLog.builder().build();
//        System.out.println("获取的logInfo："+logInfo);
//        try {
//            // 从切面织入点处通过反射机制获取织入点处的方法
//            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//
//            // 获取切入点所在的方法
//            Method method = signature.getMethod();
//            System.out.println("获取的method："+method.toString());
//
//            // 获取请求的类名
//            //String className = joinPoint.getTarget().getClass().getName();
//
//            // 获取Log注解上的属性操作
//            Log log = method.getAnnotation(Log.class);
//            if (Objects.nonNull(log)) {
//                logInfo.setOperationModule(log.operationModule());
//                logInfo.setOperationType(log.operationType());
//            }
//
//            logInfo.setOperationModule(log.operationModule()); // 请求的方法名
//            //logInfo.setUpdateId(SecurityUserUtils.getUser().getId()); // 请求用户ID
//            logInfo.setOperationType(log.operationType()); // 请求用户名称
//            logInfo.setUpdateTime(new Date()); // 创建时间LocalDateTime.now()
//            logInfoService.save(logInfo);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//
//    /**
//     * @methodName：converMap
//     * @description：转换request 请求参数
//     * @author：tanyp
//     * @dateTime：2021/11/18 14:12
//     * @Params： [paramMap]
//     * @Return： java.util.Map<java.lang.String, java.lang.String>
//     * @editNote：
//     */
//    public Map<String, String> converMap(Map<String, String[]> paramMap) {
//        Map<String, String> rtnMap = new HashMap<String, String>();
//        for (String key : paramMap.keySet()) {
//            rtnMap.put(key, paramMap.get(key)[0]);
//        }
//        return rtnMap;
//    }
//
//    /**
//     * @methodName：stackTraceToString
//     * @description：转换异常信息为字符串
//     * @author：tanyp
//     * @dateTime：2021/11/18 14:12
//     * @Params： [exceptionName, exceptionMessage, elements]
//     * @Return： java.lang.String
//     * @editNote：
//     */
//    public String stackTraceToString(String exceptionName, String exceptionMessage, StackTraceElement[] elements) {
//        StringBuffer strbuff = new StringBuffer();
//        for (StackTraceElement stet : elements) {
//            strbuff.append(stet + "<br/>");
//        }
//        String message = exceptionName + ":" + exceptionMessage + "<br/>" + strbuff.toString();
//        return message;
//    }
//}
